#pragma once

class Generic
{
	public:
		Generic(void);
		virtual ~Generic(void);
		
		static void UseFilter();
		static void UseAggregate();

		template<typename InputIterator, typename OutputIterator, typename ElementType, typename CompFunc>
			static OutputIterator Filter(InputIterator first, InputIterator last, OutputIterator at, const ElementType &value, CompFunc predicate);
		template<typename ElementType, typename Func> 
			static void Aggregate(const ElementType &value, Func function);
};

